package exemplo.dao;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless
public class DAOGenericoImpl implements DAOGenerico {

	@PersistenceContext(unitName="PBiblioPU")
	private EntityManager em;
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Object> consultaColecao(String jpql) {
		try {
			Query query = em.createQuery(jpql);
			List<Object> resultado = (List<Object>) query.getResultList();
			if (resultado.get(0) instanceof Object[]) {
				List<Object> resultadoString = new ArrayList<Object>();
				for (int i = 0; i < resultado.size(); i++) {
					Object[] registro = (Object[]) resultado.get(i);
					String valores = new String();
					for(int j = 0; j < registro.length; j++) {
						if (registro[j] instanceof Integer) {
							valores += ""+(Integer) registro[j];
						} else if (registro[j] instanceof String) {
							valores += ""+(String) registro[j];
						} else if (registro[j] instanceof Double) {
							valores += ""+(Double) registro[j];
						} else if (registro[j] instanceof Date) {
							valores += ""+(Date) registro[j];
						} else {
							valores += ""+(String) registro[j];
						}
						if (j != registro.length-1) {
							valores += "; ";
						}
					}
					resultadoString.add(valores);
				}
				return resultadoString;
			}
			return resultado;
			
		} catch (Exception ex) {
			System.err.println(ex.getMessage());
		}
		return null;
	}

	@Override
	public Object consultaEntidade(String jpql) {
		try {
			Query query = em.createQuery(jpql);
			Object resultado = query.getSingleResult();
			if (resultado instanceof Object[]) {
				Object[] registro = (Object[]) resultado;
				String valores = new String();
				for(int j = 0; j < registro.length; j++) {
					if (registro[j] instanceof Integer) {
						valores += ""+(Integer) registro[j];
					} else if (registro[j] instanceof String) {
						valores += ""+(String) registro[j];
					} else if (registro[j] instanceof Double) {
						valores += ""+(Double) registro[j];
					} else if (registro[j] instanceof Date) {
						valores += ""+(Date) registro[j];
					} else {
						valores += ""+(String) registro[j];
					}
					if (j != registro.length-1) {
						valores += "; ";
					}
				}
				return valores;
			}
		return resultado;
	} catch (Exception ex) {
		System.err.println(ex.getMessage());
	}
	return null;
}
}
